package com.gdut.multiusercommunicationsystem.controller;

import com.gdut.multiusercommunicationsystem.mapper.*;
import com.gdut.multiusercommunicationsystem.model.Friend;
import com.gdut.multiusercommunicationsystem.model.MessageSession;
import com.gdut.multiusercommunicationsystem.model.MessageSessionUserItem;
import com.gdut.multiusercommunicationsystem.model.User;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

@RestController
public class MessageSessionController {
    @Resource
    public MessageSessionMapper messageSessionMapper;

    @Resource
    public MessageMapper messageMapper;

    @GetMapping("/sessionList")
    @ResponseBody
    public Object getMessageSessionList(HttpServletRequest httpServletRequest){
        List<MessageSession> result=new LinkedList<>();
        //1.从会话中得到userId
        HttpSession httpSession=httpServletRequest.getSession(false);
        if(httpSession==null){
            System.out.println("[getMessageSessionList] 会话不存在");
            return result;
        }
        User user=(User)httpSession.getAttribute("user");
        if(user==null){
            System.out.println("[getMessageSessionList] 用户不存在");
            return result;
        }
        //2.根据得到的userId从 会话与用户关系表 中获取该Id存在于那些会话中
        List<Integer> getSessionId=messageSessionMapper.getSessionsByUserId(user.getUserId());
        //3.根据获得的SessionId表再去 会话与用户关系表 找有那些用户存在于这些会话中
        for(int sessionId:getSessionId){
            MessageSession messageSession=new MessageSession();
            messageSession.setSessionId(sessionId);
            List<Friend> friends=messageSessionMapper.getFriendsBySessionId(sessionId,user.getUserId());
            messageSession.setFriends(friends);
            //获取最后一条信息
            String content=messageMapper.getLastMessageBySession(sessionId);
            if(content==null){
                messageSession.setLastMessage("");
            }else{
                messageSession.setLastMessage(content);
            }
            result.add(messageSession);
        }
        return result;
    }

    @PostMapping("/session")
    @ResponseBody
    @Transactional
    public Object addMessageSession(int toUserId, @SessionAttribute("user")User user){
        //创建 MessageSession 对象
        MessageSession messageSession=new MessageSession();
        //插入一个会话，并获取到会话Id
        messageSessionMapper.insertMessageSession(messageSession);
        //创建 MessageSessionUserItem 对象,并插入到数据库中(1)
        MessageSessionUserItem item1 =new MessageSessionUserItem();
        item1.setSessionId(messageSession.getSessionId());
        item1.setUserId(toUserId);
        messageSessionMapper.insertMessageSessionUser(item1);
        //创建 MessageSessionUserItem 对象,并插入到数据库中(2)
        MessageSessionUserItem item2=new MessageSessionUserItem();
        item2.setSessionId(messageSession.getSessionId());
        item2.setUserId(user.getUserId());
        messageSessionMapper.insertMessageSessionUser(item2);
        System.out.println("[addMessageSession] 新增会话成功");
        Map<String,Integer> map=new HashMap<>();
        map.put("sessionId",messageSession.getSessionId());
        return map;
    }
}
